home *** CD-ROM | disk | FTP | other *** search
- 10 *=49152
- 11 !
- 12 ! DISABLE INTERUPTS,SET UP
- 13 ! INTERUPT VECTOR,ENABLE RASTER
- 14 ! INTERUPT,SET UP VIC BANKS,
- 15 ! DISABLE HARDWARE TIMER A,
- 16 ! RE-ENABLE INTERUPTS.
- 17 !
- 20 SETINT SEI
- 30 LDA #<INTR
- 40 STA 788
- 50 LDA #>INTR
- 60 STA 789
- 70 LDA 53274
- 80 ORA #1
- 90 STA 53274
- 100 LDA 53265
- 110 AND #127
- 120 STA 53265
- 130 LDA #252
- 140 STA 53266
- 150 LDA 56578
- 160 ORA #3
- 170 STA 56578
- 180 LDA 56576
- 190 AND #252
- 200 ORA #2
- 210 STA 56576
- 220 LDA 56334
- 230 AND #254
- 240 STA 56334
- 250 CLI
- 251 !
- 252 ! SET SCREEN COLOURS,
- 253 ! SET START VALUES TO BE
- 254 ! STORED IN MAP & MAP+1
- 255 ! (SEE WINDOW)
- 256 !
- 260 LDA #0
- 270 STA 53280
- 280 STA 53281
- 290 LDA #<32768
- 300 STA MAP
- 310 LDA #>32768
- 320 STA MAP+1
- 997 !
- 998 RTS
- 1000 !
- 1001 ! CHECK TO SEE IF A SCROLL
- 1002 ! IS TAKING PLACE.IF NOT JUMP
- 1003 ! TO 'NOSCROLL' OTHERWISE
- 1004 ! CHECK TO SEE WHICH OF THE 8
- 1005 ! POSSIBLE DIRECTIONS WE ARE
- 1006 ! SCROLLING IN AND PROCESS.
- 1007 !
- 1020 INTR LDA WAY
- 1030 BEQ NOSCROLL
- 1040 CMP #1
- 1050 BNE W1
- 1060 JSR YSUB
- 1070 JMP NOSCROLL
- 1080 W1 CMP #2
- 1090 BNE W2
- 1100 JSR YADD
- 1110 JMP NOSCROLL
- 1120 W2 CMP #3
- 1130 BNE W3
- 1140 JSR XSUB
- 1150 JMP NOSCROLL
- 1160 W3 CMP #4
- 1170 BNE W4
- 1179 JSR XADD
- 1180 JMP NOSCROLL
- 1181 W4 CMP #5
- 1182 BNE W5
- 1183 JSR XADD
- 1184 JSR YSUB
- 1185 JMP NOSCROLL
- 1186 W5 CMP #6
- 1187 BNE W6
- 1188 JSR YSUB
- 1189 JSR XSUB
- 1190 JMP NOSCROLL
- 1191 W6 CMP #7
- 1192 BNE W7
- 1193 JSR YADD
- 1194 JSR XADD
- 1195 JMP NOSCROLL
- 1196 W7 CMP #8
- 1197 BNE NOSCROLL
- 1198 JSR YADD
- 1199 JSR XSUB
- 1200 !
- 1210 ! SET UP LOCATION OF RASTER
- 1211 ! SPLIT AND RE-VECTOR THE
- 1212 ! INTERUPT TO PROCESS THE
- 1213 ! STATUS LINE (NON MOVING
- 1214 ! SCREEN) ROUTINE.
- 1215 !
- 1240 NOSCROLL LDA #<STATLINE
- 1250 STA 788
- 1260 LDA #>STATLINE
- 1270 STA 789
- 1280 LDA RASTER
- 1290 STA 53266
- 1300 JMP EXINT
- 1301 !
- 1302 ! SET 40 COLUMN SCREEN,
- 1303 ! CLEAR SCROLL REGISTERS TO
- 1304 ! ENSURE THIS SECTION OF THE
- 1305 ! SCREEN IS STILL,RE-VECTOR
- 1306 ! THE INTERUPT TO PROCESS THE
- 1307 ! ROUTINE DEALING WITH THE
- 1308 ! SCROLLING SECTION OF THE
- 1309 ! SCREEN,JSR TO 'CONTROL' ROUTINE
- 1310 !
- 1315 STATLINE LDA #8
- 1320 STA 53270
- 1330 LDA #23
- 1340 STA 53265
- 1350 LDA #54
- 1360 STA 53272
- 1370 LDA #<GAMEAREA
- 1380 STA 788
- 1390 LDA #>GAMEAREA
- 1400 STA 789
- 1405 LDA #7
- 1406 STA 53280
- 1410 JSR CONTROL
- 1415 LDA #0
- 1416 STA 53280
- 1420 LDA #252
- 1430 STA 53266
- 1440 JMP EXINT
- 1441 !
- 1442 ! SET 38 COLUMN,24 ROW SCREEN
- 1443 ! PRINT UP SCREEN FROM
- 1444 ! MAP & MAP+1,SET VALUES OF
- 1445 ! SCROLL REGISTERS.
- 1446 !
- 1450 GAMEAREA LDA 53270
- 1455 AND #0
- 1456 ORA #16
- 1470 ORA XSCROLL
- 1480 STA 53270
- 1490 LDA 53265
- 1500 AND #248
- 1510 ORA YSCROLL
- 1520 STA 53265
- 1610 LDA #36
- 1620 STA 53272
- 1625 LDA #6
- 1626 STA 53280
- 1650 JSR WINDOW
- 1651 LDA #0
- 1652 STA 53280
- 1654 JMP INTR
- 1655 !
- 1656 ! SIGNAL THAT INTERUPT HAS BEEN
- 1657 ! PROCESSED,RESTORE REGISTERS
- 1658 ! AND RETURN FROM INTERUPT.
- 1659 !
- 1660 EXINT LDA #1
- 1670 STA $D019
- 1690 PLA
- 1700 TAY
- 1710 PLA
- 1720 TAX
- 1730 PLA
- 1740 RTI
- 1741 !
- 1742 ! HARDWARE SCROLL SCREEN 1 PIXEL
- 1743 ! TO THE RIGHT.IF SCREEN HAS
- 1744 ! MOVED MORE THAN 1 CHAR. THEN
- 1745 ! SUBTRACT 1 FROM 16 BIT VALUE IN
- 1746 ! MAP & MAP+1.
- 1747 !
- 1750 XADD LDA 53270
- 1760 ORA #248
- 1770 CLC
- 1780 ADC XSPEED
- 1790 AND #7
- 1800 STA XSCROLL
- 1810 BCC EXXADD
- 1820 SEC
- 1830 LDA MAP
- 1840 SBC #1
- 1850 STA MAP
- 1860 LDA MAP+1
- 1870 SBC #0
- 1880 STA MAP+1
- 1960 EXXADD RTS
- 1961 !
- 1962 ! HARDWARE SCROLL SCREEN 1 PIXEL
- 1963 ! TO THE LEFT.IF SCREEN HAS
- 1964 ! MOVED MORE THAN 1 CHAR. THEN
- 1965 ! ADD 1 TO 16 BIT VALUE
- 1966 ! IN MAP & MAP+1.
- 1967 !
- 1970 XSUB LDA 53270
- 1980 AND #7
- 1990 SEC
- 2000 SBC XSPEED
- 2010 AND #7
- 2020 STA XSCROLL
- 2030 BCS EXXSUB
- 2040 CLC
- 2050 LDA MAP
- 2060 ADC #1
- 2070 STA MAP
- 2080 LDA MAP+1
- 2090 ADC #0
- 2100 STA MAP+1
- 2180 EXXSUB RTS
- 2181 !
- 2182 ! HARDWARE SCROLL THE SCREEN
- 2183 ! DOWN 1 PIXEL. IF SCREEN HAS
- 2184 ! MOVED MORE THAN 1 CHAR THEN
- 2185 ! SUBTRACT NUMBER OF SCREENS
- 2186 ! HORIZONTALLY IN MAP MULTIPLYED
- 2187 ! BY 40 FROM 16 BIT VALUE IN
- 2188 ! MAP & MAP+1.
- 2189 ! EG:-
- 2190 ! IF THERE ARE 6 SCREEN ACROSS
- 2191 ! IN MAP THEN SUBTRACT 240.
- 2192 !
- 2199 YADD LDA 53265
- 2200 ORA #248
- 2210 CLC
- 2220 ADC YSPEED
- 2230 AND #7
- 2240 STA YSCROLL
- 2250 BCC EXYADD
- 2260 SEC
- 2270 LDA MAP
- 2280 SBC #240
- 2290 STA MAP
- 2300 LDA MAP+1
- 2310 SBC #0
- 2320 STA MAP+1
- 2400 EXYADD RTS
- 2401 !
- 2402 ! AS ABOVE BUT SCROLL UP 1 PIXEL
- 2403 ! AND ADD SAME VALUE IF
- 2404 ! NECESSARY.
- 2405 !
- 2410 YSUB LDA 53265
- 2420 AND #7
- 2430 SEC
- 2440 SBC YSPEED
- 2450 AND #7
- 2460 STA YSCROLL
- 2470 BCS EXYSUB
- 2480 CLC
- 2490 LDA MAP
- 2500 ADC #240
- 2510 STA MAP
- 2520 LDA MAP+1
- 2530 ADC #0
- 2540 STA MAP+1
- 2620 EXYSUB RTS
- 4000 !
- 4001 ! (SEE DIAGRAM 1 ):-
- 4002 ! PRINT UP 1000 BYTES TO SCREEN,
- 4003 ! ( SCREEN IS AT 17408),
- 4004 ! STARTING AT MEMORY LOCATION
- 4005 ! POINTED AT BY VALUES IN
- 4006 ! MAP & MAP+1.
- 4007 !
- 4070 WINDOW LDA #<18432
- 4080 STA 253
- 4090 LDA #>18432
- 4100 STA 254
- 4120 LDA MAP
- 4130 STA 251
- 4140 LDA MAP+1
- 4150 STA 252
- 4160 LDX #18
- 4180 WINDLOOP1 LDY #0
- 4190 WINDLOOP2 LDA (251),Y
- 4200 STA (253),Y
- 4210 INY
- 4215 CPY #40
- 4220 BNE WINDLOOP2
- 4230 LDA 251
- 4240 CLC
- 4250 ADC #240
- 4260 STA 251
- 4270 BCC WINDLP2
- 4290 INC 252
- 4300 WINDLP2 LDA 253
- 4310 CLC
- 4320 ADC #40
- 4330 STA 253
- 4340 BCC EXCAL
- 4360 INC 254
- 4370 EXCAL DEX
- 4376 BNE WINDLOOP1
- 4390 RTS
- 4400 !
- 4410 ! VARIABLES AS FOLLOWS :-
- 4411 !
- 4412 ! 1 - LO,HI ADDRESS OF SCREEN
- 4413 ! (ROW 0,COLUMN 0) IN OVERALL MAP
- 4414 ! 2 - POSISTION OF RASTER SPLIT
- 4415 ! 3 - SPEED OF X SCROLL
- 4416 ! 4 - SPEED OF Y SCROLL
- 4417 ! 5 - VALUE OF X SCROLL REGISTER
- 4418 ! 6 - VALUE OF Y SCROLL REGISTER
- 4419 ! 7 - JOYSTICK X VALUE
- 4420 ! 8 - JOYSTICK Y VALUE
- 4421 ! 9 - DIRECTION OF SCROLL (0-8)
- 4422 !
- 6000 MAP BYT <32768,>32768
- 6030 RASTER BYT 189
- 6060 XSPEED BYT 1
- 6070 YSPEED BYT 1
- 6080 XSCROLL BYT 0
- 6090 YSCROLL BYT 0
- 6100 DX BYT 0
- 6110 DY BYT 0
- 6160 WAY BYT 0
- 6161 !
- 6162 ! THE VALUES IN WAY INDICATE
- 6163 ! THE FOLLWING:-
- 6164 !
- 6165 ! 0 = NO SCROLLING
- 6166 ! 1 = SCROLL UP
- 6167 ! 2 = SCROLL DOWN
- 6168 ! 3 = SCROLL LEFT
- 6169 ! 4 = SCROLL RIGHT
- 6170 ! 5 = SCROLL UP & RIGHT
- 6171 ! 6 = SCROLL UP & LEFT
- 6172 ! 7 = SCROLL DOWN & RIGHT
- 6173 ! 8 = SCROLL DOWN & LEFT
- 6174 !
- 6179 !
- 6180 ! JOYSTICK READING ROUTINE.
- 6181 ! SEE PAGE 345 OF PROGRAMMERS
- 6182 ! REFERENCE GUIDE FOR FULL
- 6183 ! EXPLANATION.
- 6184 !
- 7000 JOYREAD LDA 56320
- 7010 LDY #0
- 7020 LDX #0
- 7025 !
- 7030 LSR A
- 7040 BCS JOY0
- 7050 DEY
- 7060 JOY0 LSR A
- 7070 BCS JOY1
- 7080 INY
- 7090 JOY1 LSR A
- 7100 BCS JOY2
- 7110 DEX
- 7120 JOY2 LSR A
- 7130 BCS JOY3
- 7140 INX
- 7150 JOY3 LSR A
- 7160 STX DX
- 7170 STY DY
- 7180 RTS
- 7190 !
- 7191 ! MAIN CONTROL ROUTINE :-
- 7192 ! DECIDE WHICH DIRECTION TO
- 7193 ! SCROLL.
- 7194 !
- 8000 CONTROL JSR JOYREAD
- 8010 LDX DX
- 8020 LDY DY
- 8021 TXA
- 8022 BNE VERTICAL
- 8023 TYA
- 8024 BNE VERTICAL
- 8025 STA WAY
- 8026 RTS
- 8030 VERTICAL CPX #0
- 8040 BNE HORIZONTAL
- 8050 UPC CPY #255
- 8060 BNE DOWNC
- 8070 LDA #2
- 8080 STA WAY
- 8090 RTS
- 8100 DOWNC CPY #1
- 8110 BNE XVERT
- 8120 LDA #1
- 8130 STA WAY
- 8140 XVERT RTS
- 8150 HORIZONTAL CPY #0
- 8160 BNE DIA(null)NAL
- 8170 LEFTC CPX #255
- 8180 BNE RIGHTC
- 8190 LDA #4
- 8200 STA WAY
- 8210 RTS
- 8220 RIGHTC CPX #1
- 8230 BNE OUTCON
- 8240 LDA #3
- 8250 STA WAY
- 8260 OUTCON RTS
- 8270 DIA(null)NAL CPY #255
- 8280 BNE DIAGDOWN
- 8290 CPX #1
- 8300 BNE UPLFT
- 8310 UPRGHT LDA #8
- 8320 STA WAY
- 8330 RTS
- 8340 UPLFT CPX #255
- 8350 BNE OUTCON
- 8360 LDA #7
- 8370 STA WAY
- 8380 RTS
- 8390 DIAGDOWN CPY #1
- 8400 BNE XDIAG
- 8410 CPX #1
- 8420 BNE DWNLFT
- 8440 DWNRGHT LDA #6
- 8450 STA WAY
- 8460 RTS
- 8470 DWNLFT CPX #255
- 8480 BNE XDIAG
- 8490 LDA #5
- 8500 STA WAY
- 8510 XDIAG RTS
- 8520 !
- 8530 END
-